//
//  NSString+BCHelper.h
//  Pods
//
//  Created by Basic on 2017/3/24.
//  基础组件
//  NSString 扩展

#import <Foundation/Foundation.h>

@interface NSString (BCHelper)

#pragma mark - string 校验
/**
 判断是否为空

 @param str 需要判断的字符串
 @return 是否空
 */
+ (BOOL )bc_isEmptyNull:(NSString *)str;


/**
 去空格

 @param str 需要处理的字符串
 @return NSString
 */
+ (NSString *)bc_trimString:(NSString *)str;

/**
 生成时间戳

 @return NSString
 */
+ (NSString *)bc_timestamp;

#pragma mark - md5

/**
 获取md5 串

 @return md5 值
 */
- (NSString*)bc_md5;

#pragma mark - encode decode

/**
 URL编码

 @return return value description
 */
-(NSString *)bc_encode;

/**
 URL解码

 @return return value description
 */
-(NSString*)bc_decode;

#pragma mark - 字符串转json

/**
 string 转json

 @param str 需要处理的字符串
 @return json obj
 */
+ (id )bc_jsonObject:(NSString*)str;

#pragma mark - 计算高度

/**
 获取 指定字体 字符串的大小

 @param content 指定字符串
 @param font 字体
 @return CGSize
 */
+ (CGSize )bc_autoSize:(NSString *)content font:(UIFont*)font;

/**
 获取 指定字体 字符串的大小

 @param content 指定字符串
 @param constraint 大写约束
 @param font 字体
 @return CGSize
 */
+ (CGSize )bc_autoSize:(NSString *)content constraint:(CGSize)constraint font:(UIFont *)font;

/**
 获取自适应 宽度

 @param string 指定字符串
 @param font 字体
 @return 宽度
 */
+ (CGFloat)bc_autoWidth:(NSString*)string stringFont:(UIFont*)font;

/**
 获取自适应 高度

 @param string 指定字符串
 @param font 字体
 @param width 宽度约束
 @return 自适应高度
 */
+ (CGFloat)bc_autoHeight:(NSString*)string stringFont:(UIFont*)font textWidth:(CGFloat)width;

//
/**
 文字高度+间距 主要针对NSMutableParagraphStyle富文本编辑

 @param string 文字
 @param font 字体
 @param space 行间距
 @param width 最大宽度
 @return 高度
 */
+ (CGFloat)bc_autoHeight:(NSString*)string stringFont:(UIFont*)font lineSpacing:(CGFloat)space textWidth:(CGFloat)width;

/**
 通过textView计算文本高度
 
 @param string 文字
 @param font 字体
 @param width 最大宽度
 @param attr 富文本设置
 @return 高度
 */
+ (CGFloat)bc_textViewHeightWithString:(NSString *)string stringFont:(UIFont *)font textWidth:(CGFloat)width attributes:(NSDictionary *)attr;

#pragma mark - 获取某个子字符串在某个总字符串中位置数组

/**
 获取某个子字符串在某个总字符串中位置数组

 @param subString 子的字符串
 @return return value description
 */
- (NSArray *)bc_rangeString:(NSString*)subString;


#pragma mark - 手机号验证

/**
 验证大陆 手机号，11位 才有效
 
 @param phoneNum 大陆手机号
 @return return value description
 */
+ (BOOL )bc_validCNMobile:(NSString *)phoneNum;

/**
 验证邮箱

 @param email 邮箱
 @return return value description
 */
+ (BOOL )bc_validMail:(NSString *)email;


#pragma mark - 字符长度
/**
 字符长度，emoji 表情也作为一个字符

 @return return value description
 */
- (NSInteger )bc_length;

/**
 截取固定长度字符

 @param to to description
 @return return value description
 */
-(NSString *)bc_substringToIndex:(NSUInteger)to;


#pragma mark - URL 验证

/**
 获取有效的URL

 @param url url description
 @return return value description
 */
+ (NSString *)bc_getValidURL:(NSString *)url;


/**
 是否是完整的URL（以XXX://开头）

 @param url url description
 @return return value description
 */
+ (BOOL )bc_integralURL:(NSString *)url;

/**
 是否包含URL（这个比较宽松，bb.cc 也可以通过）

 @param url url description
 @return return value description
 */
+ (BOOL )bc_containURL:(NSString *)url;


/**
 返回指定宽度的image url

 @param width 宽度
 @return value description
 */
- (NSString *)bc_imageUrlWithWidth:(CGFloat)width;

/**
 隐藏中间电话号码

 @param string 手机号
 @return NSString
 */
+ (NSString *)bc_hidePhoneCoreNumber:(NSString *)string;
@end
